package cn.zymall.common.utils.redis;

import cn.zymall.common.model.Spu;
import lombok.*;

import java.io.Serializable;

/**
 * @author xuxianda
 * @Description: redis缓存对象实体类
 * @date 2020/8/23 21:34
 * @Copyright
 * @return
 **/
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class RedisFieldItem<T> implements Serializable {

    /**
     * 在redis中 使用键值对存储对象
     *  键使用xxxKey  值使用xxxValue
     *
     *  键的组成是由 对象名称+“：”+对象主键id
     *  值的组成是对象的json格式
     *
     *  如无法满足需求可以在下面自行添加
     */

    /**
     * redis中用户对象的key 例如： user:12345
     */
    private String userKey = "user:id";
    /**
     * redis中用户对象
     */
    private String userValue;
    /**
     * redis中商家的key 例如： merchant:12345
     */
    private String merchantKey = "merchant:id";
    /**
     * redis中商家对象
     */
    private String merchantValue;
    /**
     * redis中商品key 例如： spu:10001
     */
    private String spuKey = "spu:id";
    /**
     * redis中商品对象
     */
    private String spuValue;
    /**
     * redis中订单的key
     */
    private String orderKey = "order:id";
    /**
     * redis中订单对象
     */
    private String orderValue;
    /**
     * redis中秒杀商品key
     */
    private String secKillSpuKey = "secKillSpu:id";
    /**
     * redis中秒杀商品对象
     */
    private String secKillSpuValue;

    /**
     * redis中商品规格key  例：secKillSpu:spuId.sku_skuId
     * secKillSpu:18.sku_15
     */
    private String secKillSkuKey;

    /**
     * redis中商规格对象
     */
    private String secKillSkuValue;

    /**
     * redis中菜单的Key
     */
    private String menuKey;

    /**
     * redis中菜单的Value
     */
    private String menuValue;

    /**
     * redis中广告的Key
     */
    private String adKey;

    /**
     * redis中广告的Value
     */
    private String adValue;


    /**
     * 主键ID（转换成字符串）
     *
     * @param primaryId
     */
    public void setUserKey(String primaryId) {
        this.userKey = "user:" + primaryId;
    }

    public void setMerchantKey(String primaryId) {
        this.merchantKey = "merchant:" + primaryId;
    }

    public void setOrderKey(String primaryId) {
        this.orderKey = "order:" + primaryId;
    }

    public void setSpuKey(String primaryId) {
        this.spuKey = "spu:" + primaryId;
    }

    public void setSecKillSpuKey(String primaryId) {
        this.secKillSpuKey = "secKillSpu:" + primaryId;
    }

    /**
     * 使用这个方法之前 请先给secKillSpuKey赋值（调用setSecKillSpuKey方法）
     *
     * @param secKillSkuId
     */
    public void setSecKillSkuKey(String secKillSkuId) {
        this.secKillSkuKey = secKillSpuKey + ".sku_" + secKillSkuId;
    }

    public void setMenuKey(String menuId) {
        this.menuKey = "menu:" + menuId;
    }

    public void setAdKey(String adId) {
        this.adKey = "advertising:" + adId;
    }
}
